package com.xayy.health.core.manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;

@Component
public class DynamicSchedulerManager {
    @Autowired
    private TaskScheduler taskScheduler; // Spring 自动注入的调度器

    private final Map<String, ScheduledFuture<?>> taskMap = new HashMap<>(); // 存储任务名称和对应的 Future

    // 添加或更新任务
    public void addOrUpdateTask(String taskName, String cronExpression, Runnable task) {
        // 1. 如果任务已存在，先取消旧任务
        if (taskMap.containsKey(taskName)) {
            taskMap.get(taskName).cancel(false); // false 表示不中断正在执行的任务
        }
        // 2. 注册新任务
        ScheduledFuture<?> future = taskScheduler.schedule(
                task,
                new CronTrigger(cronExpression)
        );
        // 3. 保存 Future 对象
        taskMap.put(taskName, future);
    }

    // 停止指定任务
    public void stopTask(String taskName) {
        if (taskMap.containsKey(taskName)) {
            taskMap.get(taskName).cancel(false); // 取消任务
            taskMap.remove(taskName); // 从 Map 中移除
            System.out.println("任务已停止: " + taskName);
        }
    }

    // 停止所有任务
    public void stopAllTasks() {
        taskMap.values().forEach(future -> future.cancel(false));
        taskMap.clear();
        System.out.println("所有任务已停止");
    }
}
